Hello 大家好我是 Larry,去年休息一次後今年決定再度參戰,這也是我第三次參加鐵人賽了。
雖然參加鐵人賽真的很痛苦,會有長達一個多月茶不思、飯不想、連做夢都在想文章要寫什麼,但每次結束後都很慶幸當初有參加,好像自己完成了什麼不得了的大事XDD。而且一想到有這麼多人跟我一樣每天都在趕 12 點就覺得熱血沸騰,所以今年也是鼓起勇氣報名了~
今年的系列文「從以卵擊石到堅若磐石之 Web API 安全性全攻略」標題很長XD,主要是想跟大家分享如何打造一個高安全性的 API server,以及在實作 API 的商業邏輯時,有哪些該注意的眉眉角角
除了講述抽象的概念之外,為了讓大家更了解怎麼在實戰中應用,我也會用 Node.js 跟 Go 寫一些範例(因為這兩個我比較熟XD)
而其他程式語言的話,因為各語言在概念上都是相通的,所以即便你是用 Python/Java/Rust 架 API Server 也沒問題,只要看完文章、有了大觀念之後稍微 Google 一下,很快便能查到怎麼實作,所以一樣可以讀這系列的文章~
真要說其實也沒有什麼先備知識XD,只要知道怎麼用 Node.js/Python/Go 這類的後端語言啟動一個 HTTP server 就好
若是對於怎麼架 HTTP server 還不太熟悉,我也幫各位找了幾篇教學文,只要看完應該就知道怎麼做了~
要打造一個高安全性的 HTTP server 從來就不是一件容易的事,因為各個環節都有可能出現漏洞,因此我打算把整個系列分成以下幾個部分來談:
一個安全的 API server 就像大樓的警衛,需要對進入的各種人員、資料做管制。所以這部分會談談對於從外部進入 API server 的資料該做哪些檢查,才可以盡量提高伺服器的安全性
為了避免 API server 被少數惡意使用者用流量灌爆,這部分會聊聊幾種常見的流量限制策略,以及示範他們要如何實作,讓你的 server 不會那麼輕易被打掛。
隨著網路上的 Web 應用程式越來越多,為了提升安全性,現在跟安全性有關的 HTTP header 也是多到記不得,所以我會花個幾天講講一些常見的 HTTP header,並且教你如何設定這些 headers ~
雖然 Cookie 也是 HTTP Header 的一部分,但我覺得 cookie 應該要自成一個段落,在這個段落中我會詳細說明 cookie 的屬性如 httpOnly、secure 等等,讓大家更了解 cookie 相關的安全議題
平常三不五時就會在程式討論區看到「JWT 要放在 cookie 還是 localStorage?」或是「Session ID 要多長才夠安全?」這類的問題,所以希望這個段落可以把這些跟 session、token 有關的安全性一次講完,讓讀者對於 session 管理有更全面的認識
怎麼安全的保管使用者的密碼一直以來都是個很重要的議題,所以這邊會講講保存密碼、修改密碼、忘記密碼這些功能應該怎麼做,讓你把密碼相關的安全知識一次補足
資料庫可以說是一家公司的命脈,資料沒了那就什麼都沒了,所以這部分會談談怎麼讓你的資料庫更安全,包括權限設定、injection 等等都會在這邊談到
自從進入大容器時代後,Docker、K8s 已經逐漸成為開發、測試及部署時不可或缺的工具,因此這邊會講講怎麼寫出安全的 Dockerfile、使用 Docker 的注意事項等等跟容器安全相關的 best practice
這系列的內容大概就是這樣,明天就要正式開始了~希望大家會喜歡這個系列
如果內容上有任何問題或是哪裡講解不夠清楚、範例太少等等,也很歡迎各位在留言區跟我說,我會盡量參考大家的建議做改進的~